package com.vim.modules.api.service;

import com.github.pagehelper.PageInfo;
import com.vim.common.constants.DictConstants;
import com.vim.common.utils.EncryUtils;
import com.vim.common.utils.HttpClientUtils;
import com.vim.modules.api.dao.ConfigDao;
import com.vim.modules.api.model.Config;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.ArrayList;
import java.util.List;

/**
 * @作者 Administrator
 * @时间 2019-09-19 9:39
 * @版本 1.0
 * @说明
 */
@Service
public class ConfigService {

    @Autowired
    private ConfigDao configDao;

    /**
     * 查询所有
     */
    public List<Config> findList(Config config){
        return configDao.findList(config);
    }

    /**
     * 分页查询所有
     */
    public PageInfo<Config> findPageList(Config config){
        return new PageInfo<>(findList(config));
    }

    /**
     * 查询配置
     */
    public Config get(String id) {
        return configDao.get(id);
    }

    /**
     * 更新或保存
     * @param config
     */
    public void saveOrUpdate(Config config) {
        if(StringUtils.isNotBlank(config.getId())){
            update(config);
        }else{
            save(config);
        }
    }

    /**
     * 保存
     */
    public void save(Config config){
        config.setId(EncryUtils.primaryKey());
        configDao.save(config);
    }

    /**
     * 更新
     */
    public void update(Config config){
        configDao.update(config);
    }

    /**
     * 推送配置
     */
    @Transactional
    public void sendConfig(Config config) {
        boolean flag = false;
        //推送配置
        try {
            String result = HttpClientUtils.send("http://localhost:9000/actuator/bus-refresh", RequestMethod.POST, new ArrayList<>());
            System.out.println("推送配置结果: "+result);
            flag = true;
        }catch (Exception e){
            e.printStackTrace();
        }
        //更改数据库
        if(flag){
            config.setStatus(DictConstants.CONFIG_SEND_STATUS.SENDED.getValue());
        }else{
            config.setStatus(DictConstants.CONFIG_SEND_STATUS.SEND_ERROR.getValue());
        }
        update(config);
    }
}
